#ifndef AxisAlignedLoader_hpp
#define AxisAlignedLoader_hpp

#include "loaders/ILoader.hpp"
#include "particles/IParticlePopulation.hpp"
#include "domains/IDomain.hpp"
#include "distributions/IDistribution.hpp"
#include "distributions/IAxisAlignedDistribution.hpp"

class AxisAlignedLoader : public IParticleLoader {	// abstract class that takes care of calculating bounds when a new domain is passed in via setDomain(); load() is pure virtual
	public:
		AxisAlignedLoader(IAxisAlignedDistribution *_sdist, IAxisAlignedDistribution *_vdist);
		~AxisAlignedLoader();
		//
		virtual void load(IParticlePopulation *pop)=0;
		void setDomain(IAxisAlignedDomain *_dom);
	protected:
		IAxisAlignedDistribution *sdist;
		IAxisAlignedDistribution *vdist;
		IAxisAlignedDomain *dom;
		double xmin,xmax,ymin,ymax;     // axis aligned bounds for loading
};

#endif
